/**
 * 
 */
package com.uacp.sgb.datos.dominio.persistencia.util;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

import com.uacp.sgb.datos.dominio.entidades.Dependencia;
import com.uacp.sgb.datos.dominio.entidades.Equipo;
import com.uacp.sgb.datos.dominio.entidades.Mueble;
import com.uacp.sgb.datos.dominio.entidades.TipoBien;
import com.uacp.sgb.datos.dominio.entidades.Trabajador;
import com.uacp.sgb.datos.dominio.persistencia.dao.DependenciaDao;
import com.uacp.sgb.datos.dominio.persistencia.dao.EquipoDao;
import com.uacp.sgb.datos.dominio.persistencia.dao.MuebleDao;
import com.uacp.sgb.datos.dominio.persistencia.dao.TipoBienDao;
import com.uacp.sgb.datos.dominio.persistencia.dao.TrabajadorDao;

public class UtilSQLite 
{	
	// Exportar algunas de las dependencias
	public static void exportarAlgunasDependencias(List<Dependencia> dependencias)
	{
		exportarTiposBienes();
		
		for(Dependencia dependencia: dependencias)
		{
			exportarUnaDependencia(dependencia);
		}
	}
	
	// Exportar una sola dependencia
	public static void exportarUnaDependencia(Dependencia dependencia)
	{
		exportarDatosDependencia(dependencia);
	}
	
	// Exportar todas las dependencias
	public static void exportarTodasDependencias()
	{
		List<Dependencia> dependencias = DependenciaDao.listar();
		
		for(Dependencia dependencia: dependencias)
		{
			exportarDatosDependencia(dependencia);
		}
	}
	
	public static void exportarDatosDependencia(Dependencia dependencia)
	{
		List<Dependencia> areas = DependenciaDao.listarAreas(dependencia);
	
		for(Dependencia area: areas)
			guardarSqliteArea(area);
		
		for(Dependencia area: areas)
		{
			List<Trabajador> trabajadores = TrabajadorDao.listarPorArea(area);
			
			for(Trabajador trabajador: trabajadores)
			{
				guardarSqliteTrabajador(trabajador);
				
				List<Equipo> equipos = EquipoDao.listarEquiposTrabajador(trabajador);
				List<Mueble> muebles = MuebleDao.listarMueblesTrabajador(trabajador);
				
				guardarSQLiteEquipos(equipos);
				guardarSQLiteMuebles(muebles);
			}
		}
	}	
	
	public static void exportarTiposBienes()
	{
		List<TipoBien> tiposBienes = TipoBienDao.listar();
		
		EntityManager em = UtilManager.getEntityManagerSQLite();
		
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		
		for(TipoBien tipoBien: tiposBienes)
		{
			em.persist(tipoBien);
		}
		
		tx.commit();
		em.close();
	}
	
	public static void guardarSQLiteEquipos(List<Equipo> equipos)
	{
		EntityManager em = UtilManager.getEntityManagerSQLite();
		
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		
		for(Equipo equipo: equipos)
		{
			em.merge(equipo);
		}
		
		tx.commit();
		em.close();
	}
	
	public static void guardarSQLiteMuebles(List<Mueble> muebles)
	{
		EntityManager em = UtilManager.getEntityManagerSQLite();
		
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		
		for(Mueble mueble: muebles)
		{
			em.merge(mueble);
		}
		
		tx.commit();
		em.close();
	}
	
	public static void guardarSqliteArea(Dependencia dependencia)
	{
		EntityManager em = UtilManager.getEntityManagerSQLite();
		
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		em.persist(dependencia);
		tx.commit();
		em.close();
	}
	
	public static void guardarSqliteTrabajador(Trabajador trabajador)
	{
		EntityManager em = UtilManager.getEntityManagerSQLite();
		
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		em.persist(trabajador);
		tx.commit();
		em.close();
	}
}
